package main

import (
	"fmt"
	goredislib "github.com/go-redis/redis/v8"
	"github.com/go-redsync/redsync/v4"
	"github.com/go-redsync/redsync/v4/redis/goredis/v8"
	"time"
)

func main() {
	// 创建一个redis的客户端连接
	redisClient := goredislib.NewClient(&goredislib.Options{
		Addr:     "111.229.176.202:6379",
		Password: "www#1234",
		DB:       2,
	})

	// 这里使用了 goredis/v8，你可以根据实际情况选择适合的 Redis 连接库
	pool := goredis.NewPool(redisClient)

	// 创建一个 Redsync 实例
	rs := redsync.New(pool)

	// 定义一个锁的名称
	lockName := "my-lock"

	// 尝试获取锁，超时时间设置为 5 秒
	mutex := rs.NewMutex(lockName, redsync.WithExpiry(10*time.Second))

	// 获取锁
	if err := mutex.Lock(); err != nil {
		// 处理获取锁失败的情况
		fmt.Println("Failed to acquire lock:", err)
		return
	}
	fmt.Println("Lock acquired successfully!")

	// 模拟一些需要锁保护的代码
	// 这里只是简单地 Sleep 一下，你可以替换成实际的业务逻辑
	time.Sleep(10 * time.Second)

	// 释放锁
	if ok, err := mutex.Unlock(); !ok {
		// 处理释放锁失败的情况
		fmt.Println("Failed to release lock:", err)
		return
	}
	fmt.Println("Lock released successfully!")
}
